function draw_data(data, problem, config)
    cla; box on; hold on;
    set(gca, 'FontSize', config.font_size);
    xlim([config.x_min, config.x_max]);
    ylim([config.y_min, config.y_max]);
    set(gca, 'XTick', config.x_min:1:config.x_max);
    set(gca, 'YTick', config.y_min:1:config.y_max);
    if size(data.X, 1) > 0
        switch problem
            case {'binary', 'multiclass'}
                for l = unique(data.y)'
                    ins = find(data.y == l);
                    plot(data.X(ins, 1), data.X(ins, 2), 'Color',      config.data_colors(l, :), ...
                                                         'Marker',     config.data_markers(l), ...
                                                         'MarkerSize', config.data_size, ...
                                                         'LineWidth',  config.data_width, ...
                                                         'LineStyle',  'none');
                end
            case 'clustering'
                plot(data.X(:, 1), data.X(:, 2), 'Color',      config.data_colors(1, :), ...
                                                 'Marker',     config.data_markers(1), ...
                                                 'MarkerSize', config.data_size, ...
                                                 'LineWidth',  config.data_width, ...
                                                 'LineStyle',  'none');
            case 'regression'
                plot(data.X(:, 1), data.y(:, 1), 'Color',      config.data_colors(1, :), ...
                                                 'Marker',     config.data_markers(1), ...
                                                 'MarkerSize', config.data_size, ...
                                                 'LineWidth',  config.data_width, ...
                                                 'LineStyle',  'none');
        end
    end
end